#include <stdio.h>
#include <vector>
#include "test_pthread.h"
#include "test_thread_pool.h"

// void myThreadFunction(Counter& counter, int times);

// int main(int argc, const char* argv[])
// {
//     Counter tmpCounter;
//     std::vector<std::thread> threads;
//     for (int i = 0;i < 5;i++)
//     {
//         threads.push_back(std::thread(myThreadFunction, std::ref(tmpCounter), 10));
//     }

//     for (auto& it : threads)
//     {
//         it.join();
//     }

//     return 0;
// }


// void myThreadFunction(Counter& counter, int times)
// {
//     for (int i = 0; i < times; i++)
//     {
//         counter.increment();
//     }
// }

// ---
// 主函数
// ---
int main()
{
    // 创建一个包含4个线程的线程池
    ThreadPool pool(4);

    // 提交一些任务
    for (int i = 0; i < 10; ++i)
    {
        pool.enqueue(new PrintNumberTask(i)); // 使用 new 创建任务对象
    }

    for (int i = 0; i < 5; ++i)
    {
        pool.enqueue(new CalculateTask(i * 10, i * 5));
    }

    // 主线程可以继续做其他事情
    std::this_thread::sleep_for(std::chrono::seconds(2)); // 等待任务执行一段时间

    std::cout << "Main thread finished submitting tasks and waiting for some execution." << std::endl;

    // 线程池会在main函数结束时自动调用析构函数，从而安全关闭所有线程。
    // 如果你不希望它立即关闭，可以在这里做一些额外的操作，比如等待所有任务完成。
    // 但在这个简单的示例中，让其自动析构足以展示。

    return 0;
}

